package cn.jiahua.test17;

import java.awt.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Test {

    public static void main(String[] args) {
        List<String> list=new ArrayList<>();
        list.add("hello");
        list.add("Java");
        list.add("World");


        //1.1、遍历转换为大写：
        //转为Stream
        List<String> stringList=  list.stream().map(String::toUpperCase).collect(Collectors.toList());
        //流进行遍历
        //     stringList.stream().forEach(System.out::print);
        stringList.stream().forEach((t)->{
            System.out.print(t);
        });



        List<Integer> nums = Arrays.asList(1, 2, 3, 4);
        List<Integer> squareNums = nums.stream().
                map(n -> n * n).
                collect(Collectors.toList());
        squareNums.stream().forEach(System.out::print);
        System.out.println();
        //2.2 fiter 过滤
        List<String> filterLists = new ArrayList<>();
        filterLists.add("c");
        filterLists.add("a");
        filterLists.add("b");
        filterLists.forEach(System.out::print);
        System.out.println();
        List afterFilterLists = filterLists.stream().filter(s -> !s.equals("c")) .collect(Collectors.toList());
        afterFilterLists.stream().forEach(System.out::print);
        System.out.println();
        filterLists.forEach(System.out::print);

        System.out.println();
        //ForEach
        //  如果只是想对流中的每个对象进行一些自定义的操作，可以使用forEach：
        List<String> forEachLists = new ArrayList<>();
        forEachLists.add("a");
        forEachLists.add("b");
        forEachLists.add("c");

        forEachLists.stream().forEach(s-> System.out.println(s));
        forEachLists.stream().forEach(s-> {
            System.out.println("hello"+s);
        });


        /**
         * 返回特定的结果集合（limit/skip）：
         * limit 返回 Stream 的前面 n 个元素；skip 则是扔掉前 n 个元素:
         */
        System.out.println();
        List<String> forEachLists1 = new ArrayList<>();
        forEachLists1.add("a");
        forEachLists1.add("b");
        forEachLists1.add("c");
        forEachLists1.add("d");
        forEachLists1.add("e");
        forEachLists1.add("f");
        forEachLists1.stream().skip(2).limit(3).forEach(System.out::print);

        System.out.println();

        /**
         *  5、排序（sort/min/max/distinct）：
         * sort可以对集合中的所有元素进行排序。max，min可以寻找出流中最大或者最小的元素，而distinct可以寻找出不重复的元素：
         */
        List<Integer> sortLists = new ArrayList<>();
        sortLists.add(1);
        sortLists.add(4);
        sortLists.add(6);
        sortLists.add(3);
        sortLists.add(2);
        List<Integer> afterSortLists = sortLists.stream().sorted((In1,In2)-> In2-In1).collect(Collectors.toList());
        afterSortLists.stream().forEach(System.out::print);

        System.out.println();
        //长度最大的元素
        List<String> maxLists = new ArrayList<>();
        maxLists.add("1");
        maxLists.add("2");
        maxLists.add("2");
        maxLists.add("3");
        maxLists.add("4");
        maxLists.add("5");
        maxLists.add("6");
        maxLists.stream().mapToInt(s->s.length()).forEach(System.out::print);
        int maxLength = maxLists.stream().mapToInt(s->s.length()).max().getAsInt();

        System.out.println("字符串长度最长的长度为"+maxLength);


        String max =maxLists.stream().max((t1,t2)->{return Integer.parseInt(t1)-Integer.parseInt(t2);}).get();
        System.out.println(max);

        System.out.println();
        //查询重复的元素
        List<String> distinctList = new ArrayList<>();
        distinctList.add("a");
        distinctList.add("a");
        distinctList.add("c");
        distinctList.add("d");
        //其中的distinct()方法能找出stream中元素equal()，即相同的元素，并将相同的去除，上述返回即为a,c,d。
        List<String> afterDistinctList = distinctList.stream().distinct().collect(Collectors.toList());
        afterDistinctList.stream().forEach(System.out::print);


        System.out.println();
        //匹配(Match方法)：
        List<String> matchList = new ArrayList<>();
        matchList.add("a");
        matchList.add("a");
        matchList.add("c");
        matchList.add("d");

        boolean isExits = matchList.stream().anyMatch(s -> s.equals("c"));
        System.out.println(isExits);
       // 6.2、判断集合中是否全不为空：
        System.out.println();
        matchList.add("a");
        matchList.add("b");
        matchList.add("a");
        matchList.add("c");
        matchList.add("d");
        boolean isNotEmpty = matchList.stream().noneMatch(s -> s.isEmpty());
        System.out.println(isNotEmpty);
        boolean all = matchList.stream().allMatch(s -> s.equals("a"));
        System.out.println(all);









    }
}
